/**
 * 登录验证工具类
 */

class AuthManager {
  constructor() {
    this.loginCheckPages = [
      '/pages/main/home/home',
      '/pages/main/organization/organization', 
      '/pages/main/application/application',
      '/pages/main/create/create',
      '/pages/main/profile/profile',
      '/pages/admin/app-management/app-management',
      '/pages/admin/permission-management/permission-management',
      '/pages/admin/user-permission-detail/user-permission-detail',
      '/pages/admin/role-permissions/role-permissions'
    ];
  }

  /**
   * 检查用户是否已登录
   * @returns {Object} 登录状态和用户信息
   */
  checkLoginStatus() {
    try {
      const username = wx.getStorageSync('username');
      const userInfo = wx.getStorageSync('user_info');
      console.log('验证登录用户名',username)
      if (!username || !userInfo) {
        return {
          isLoggedIn: false,
          userInfo: null,
          username: null
        };
      }

      return {
        isLoggedIn: true,
        userInfo: userInfo,
        username: username
      };
    } catch (e) {
      console.error('检查登录状态失败:', e);
      return {
        isLoggedIn: false,
        userInfo: null,
        username: null
      };
    }
  }

  /**
   * 验证登录状态，未登录则跳转到登录页
   * @param {boolean} showToast 是否显示提示
   * @returns {boolean} 是否已登录
   */
  requireLogin(showToast = true) {
    const loginStatus = this.checkLoginStatus();
    
    if (!loginStatus.isLoggedIn) {
      if (showToast) {
        wx.showToast({
          title: '请先登录',
          icon: 'none',
          duration: 1500
        });
      }
      
      // 延迟跳转，让用户看到提示
      setTimeout(() => {
        wx.reLaunch({
          url: '/pages/login/login'
        });
      }, showToast ? 1500 : 0);
      
      return false;
    }
    
    return true;
  }

  /**
   * 检查管理员权限
   * @returns {boolean} 是否为管理员
   */
  checkAdminPermission() {
    const loginStatus = this.checkLoginStatus();
    
    if (!loginStatus.isLoggedIn) {
      return false;
    }
    
    // 检查是否为管理组 (Per_group_id === 1)
    return loginStatus.userInfo.Per_group_id === 1;
  }

  /**
   * 验证管理员权限，非管理员则提示并返回
   * @returns {boolean} 是否为管理员
   */
  requireAdminPermission() {
    if (!this.requireLogin()) {
      return false;
    }
    
    if (!this.checkAdminPermission()) {
      wx.showModal({
        title: '权限不足',
        content: '您没有权限访问此页面',
        showCancel: false,
        success: () => {
          wx.navigateBack({
            fail: () => {
              wx.switchTab({
                url: '/pages/main/home/home'
              });
            }
          });
        }
      });
      return false;
    }
    
    return true;
  }

  /**
   * 登出
   */
  logout() {
    try {
      wx.removeStorageSync('username');
      wx.removeStorageSync('password');
      wx.removeStorageSync('user_info');
      console.log('清空用户缓存')
      wx.showToast({
        title: '已退出登录',
        icon: 'success',
        duration: 1500
      });
      
      setTimeout(() => {
        wx.reLaunch({
          url: '/pages/login/login'
        });
      }, 1500);
    } catch (e) {
      console.error('登出失败:', e);
    }
  }

  /**
   * 保存登录信息
   * @param {string} username 用户名
   * @param {string} password 密码
   * @param {Object} userInfo 用户信息
   */
  saveLoginInfo(username, password, userInfo) {
    try {
      wx.setStorageSync('username', username);
      wx.setStorageSync('password', password);
      wx.setStorageSync('user_info', userInfo);
      console.log('登录成功保存用户信息:', userInfo);
    } catch (e) {
      console.error('保存登录信息失败:', e);
    }
  }

  /**
   * 获取用户信息
   * @returns {Object|null} 用户信息
   */
  getUserInfo() {
    const loginStatus = this.checkLoginStatus();
    return loginStatus.userInfo;
  }

  /**
   * 获取用户名
   * @returns {string|null} 用户名
   */
  getUsername() {
    const loginStatus = this.checkLoginStatus();
    return loginStatus.username;
  }

  /**
   * 页面登录检查混入方法
   * 在页面的 onLoad 或 onShow 中调用
   */
  pageLoginCheck() {
    return this.requireLogin();
  }

  /**
   * 管理员页面权限检查混入方法
   */
  pageAdminCheck() {
    return this.requireAdminPermission();
  }
}

// 创建单例实例
const authManager = new AuthManager();

// 导出实例和类
module.exports = {
  authManager,
  AuthManager
};